<?php

class CarsController extends AppController {

    var $name = 'Cars';
    var $uses = array('Car', 'Client', 'Key', 'Record');
    var $helpers = array('Html', 'Form', 'Javascript');
    
    function beforeFilter() {
        parent::beforeFilter();
        
        //si no es un usuario con nivel = 3 o 1 no lo dejo acceder a las siguientes funciones de este controlador
        if (in_array($this->action, array('index','add', 'edit', 'delete', 'view', 'agregar_llave', 'cambio_titular')) and $this->Auth->user('id') and !(in_array($this->Auth->user('level'), array(1,3)))) {
            $this->redirect(array('user' => false, 'controller' => 'articles', 'action' => 'inicio'));
        }
    }

    function index() {
        $this->Car->recursive = 1;
        if (!empty($this->data)) {
            $datos = $this->data['Car'];
            $filtro = '';

            if (isset($datos['letra']) && trim($datos['letra']) != '') {
                $filtro .= " Car.letter = '" . strtoupper($datos['letra']) . "'";
            }
            if (isset($datos['numero']) && trim($datos['numero']) != '') {
                if (isset($datos['letra']) && trim($datos['letra']) != '') {
                    $filtro .= " AND Car.number = '" . $datos['numero'] . "'";
                } else {
                    $filtro .= " Car.number = '" . $datos['numero'] . "'";
                }
            }
            //aca sigo agregando los filtros que quieras

            $this->paginate['order'] = array('Car.letter' => 'ASC');
            $resultados = $this->paginate('Car', array($filtro));

            $this->set('cars', $resultados);

            //guardo el filtro usado en session para despues recordarlo con el paginate
            $restricciones = array('filter' => $filtro, 'order' => $this->paginate['order']);
            $this->Session->write('search_conditions_cars', $restricciones);
        } elseif ($this->Session->check('search_conditions_cars')) {

            //si habia algun filtro guardado en session lo tengo que tomar y seguir aplicando el mismo
            //si estoy paginando
            if (isset($this->params['named']['limit']) || isset($this->params['named']['page'])) {
                $restricciones = $this->Session->read('search_conditions_cars');

                //si esta acomodando por algun campo en particular
                if (isset($this->params['named']['sort'])) {
                    $this->paginate['order'] = array($this->params['named']['sort'] => $this->params['named']['sort']['direction']);
                } else {
                    //sino sigo aplicando el mismo que ya venia
                    $this->paginate['order'] = $restricciones['order'];
                }
                //si hay que seguir el filtro de articulos
                $resultados = $this->paginate('Car', array($restricciones['filter']));

                $this->set('cars', $resultados);
            } else {
                //lo borro de la session
                $this->Session->delete('search_conditions_cars');
                $this->paginate['order'] = array('Car.letter' => 'ASC');
                $resultados = $this->paginate('Car');
                $this->set('cars', $resultados);
            }
        } else {
            $this->paginate['order'] = array('Car.letter' => 'ASC');
            $resultados = $this->paginate('Car');
            $this->set('cars', $resultados);
        }
    }

    function view($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Auto invalido', true));
            $this->redirect(array('action' => 'index'));
        }
        $this->set('car', $this->Car->read(null, $id));
    }

    function add() {
        if (!empty($this->data)) {
            $datos = $this->data;
            $datos['Car']['letter'] = strtoupper($datos['Car']['letter']);
            
            $datos_disponibles = $this->Car->find('first', array('conditions' => array('Car.letter' => $datos['Car']['letter'], 'Car.number' => $datos['Car']['number'])));
            if($datos_disponibles == NULL){
                $this->Car->create();
                if ($this->Car->save($datos)) {
                    $car_id = $this->Car->id; //despues de un save, asi obtenes el id del registro que guardarste
    //                $this->Session->setFlash(__('El auto fue guardado', true));
                    $this->redirect(array('action' => 'view', $car_id));
                } else {
                    $this->Session->setFlash(__('El auto no fue guardado. Por favor, intente de nuevo.', true));
                }
            }else{
                $this->Session->setFlash(__('No pueden haber dos autos con la misma patente.', true));
            }
        }
        $clientes = $this->Client->find('all', array('fields' => array('Client.first_name', 'Client.last_name', 'Client.id')));
        $clients = array();        
//        $clients[0] = "";        
        foreach ($clientes as $cli) {
            $clients[$cli['Client']['id']] = $cli['Client']['last_name'] . ' ' . $cli['Client']['first_name'];
        }
//		$clients = $this->Car->Client->find('list');
        $keys = $this->Car->Key->find('list');
        $this->set(compact('clients', 'keys'));
    }

    function agregar_llave($id = null) {
        $contar_llaves = $this->Key->find('count', array('conditions' => array('Key.car_id' => $id)));
        if ($contar_llaves < 1) {
            if (!empty($this->data)) {
                $datos = $this->data['Car'];
                $this->Key->create();
                if ($this->Key->save($datos)) {
//                    $this->Session->setFlash(__('La llave fue guardado.', true));
                    $this->redirect(array('controller' => 'cars', 'action' => 'view', $this->data['Car']['car_id']));
                } else {
                    $this->Session->setFlash(__('La llave no fue guardado. Por favor, intente de nuevo.', true));
                }
            }
        } else {
            $this->Session->setFlash(__('El auto posee ya una llave.', true));
            $this->redirect(array('controller' => 'cars','action' => 'view', $id));
        }
        $this->set('valor_id', $id);
    }

    function cambio_titular($id = null) {
        $this->Car->query('SET AUTOCOMMIT = 0;');
        $this->Car->query('START TRANSACTION;');
        $bandera = true; //la uso para ver si algo salio mal

        if (!empty($this->data)) {
            $array_cliente = array();
            $array_cliente['last_name'] = $this->data['Car']['last_name'];
            $array_cliente['first_name'] = $this->data['Car']['first_name'];
            $array_cliente['addres'] = $this->data['Car']['addres'];
            $array_cliente['phone'] = $this->data['Car']['phone'];
            $array_cliente['high_date'] = date('Y-m-d H:i:s');
            $array_cliente['locality'] = $this->data['Car']['locality'];
            $array_cliente['province_id'] = $this->data['Car']['province_id'];
            
            $this->Client->create();
            if ($this->Client->save($array_cliente)) {
                $client = $this->Client->id; //me traigo el cliente q guarde
                //Actualizo el auto al nuevo cliente
                $aux = $this->Car->find('first', array('conditions' => array('Car.id' => $this->data['Car']['id'])));
                //Ahora uso los datos del cliente anterior para insertar en el historico
                $array_historial = array();
                $array_historial['start_date'] = $aux['Client']['high_date'];
                $array_historial['end_date'] = date('Y-m-d H:i:s');
                $array_historial['client_id'] = $aux['Car']['client_id'];
                $array_historial['car_id'] = $aux['Car']['id'];
                
                //Seteo el nuevo Titular del auto
                $aux['Car']['client_id'] = $client;
                if ($this->Car->save($aux)) {
                    $this->Record->create();
                    if($this->Record->save($array_historial)){
                        $bandera = true;
                    }else{
                        $bandera = false;
                    }
//                    $this->Session->setFlash(__('The client has been saved', true));
//                    $this->redirect(array('action' => 'index'));
                } else {
                    $bandera = false;
                }
            } else {
                $bandera = false;
            }
        if ($bandera) {
            $this->Car->query('COMMIT;');
            $this->Car->query('SET AUTOCOMMIT = 1;');
            $this->redirect(array('controller' => 'clients', 'action' => 'view', $client));
        } else {//si hubo algun error hago un ROLLBACK deshaciendo todas estas consultas
            $this->Car->query('ROLLBACK;');
            $this->Car->query('SET AUTOCOMMIT = 1;');
            $this->Session->setFlash(__('El auto no fue guardado. Por favor, intente de nuevo.', true));
        }
        }

        $provinces = $this->Client->Province->find('list');
        $this->set(compact('provinces'));
        
        $this->set('valor_id', $id);
    }

    function edit($id = null) {
        if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Auto invalido', true));
            $this->redirect(array('action' => 'index'));
        }
        $datos = $this->data;
        $datos['Car']['letter'] = strtoupper($datos['Car']['letter']);
        
        if (!empty($this->data)) {
            if ($this->Car->save($datos)) {
                $car_id = $this->Car->id; //despues de un save, asi obtenes el id del registro que guardarste
//                $this->Session->setFlash(__('El auto fue guardado.', true));
                $this->redirect(array('controller' => 'clients','action' => 'view', $this->data['Car']['client_id']));
            } else {
                $this->Session->setFlash(__('El auto no fue guardado. Por favor, intente de nuevo.', true));
            }
        }
        if (empty($this->data)) {
            $this->data = $this->Car->read(null, $id);
        }
        $clientes = $this->Client->find('all', array('fields' => array('Client.first_name', 'Client.last_name', 'Client.id')));
        $clients = array();
        foreach ($clientes as $cli) {
            $clients[$cli['Client']['id']] = $cli['Client']['last_name'] . ' ' . $cli['Client']['first_name'];
        }
        $this->set(compact('clients'));
    }

    function delete($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Auto invalido', true));
            $this->redirect(array('action' => 'index'));
        }
        $auto_eliminado = $this->Car->find('first', array('conditions' => array('Car.id' => $id)));
        $contar_llave = $this->Key->find('count', array('conditions' => array('Key.car_id' => $id)));//Si el auto posee llave
        $contar_historial = $this->Record->find('count', array('conditions' => array('Record.car_id' => $id)));//Si el auto esta asociado con algun historial
        if($contar_llave == 0 && $contar_historial == 0){
            if ($this->Car->delete($id)) {
                $this->Session->setFlash(__('Auto eliminado', true));
                $this->redirect(array('controller' => 'clients','action' => 'view', $auto_eliminado['Client']['id']));
            }
        }
        $this->Session->setFlash(__('El auto no fue eliminado. Verifique si tiene una llave asociada o registra algun historial', true));
        $this->redirect(array('action' => 'view', $id));
    }

}
